feat(web): rebuild the home page around one number - #1004
Merged
Conversation
… page The home page showed two currency tiles and one table, leaving most of the viewport empty and saying little about the organization. It now shows four tiles — total balance, today's volume, wallets and tokens held — plus a per-token balance breakdown ordered largest first. All of it comes from the wallet aggregate the page already fetched and previously discarded after summing, so this adds no request and no latency. Bars scale against the largest holding rather than the total, so a small position next to a dominant one stays visible instead of rounding to nothing. Token symbols go through the shared label resolver with the symbols the balances carry, so org-issued tokens are named rather than shown as shortened mints. The route skeleton now draws four tiles so the grid does not reflow on load.
tobySolutions
added a commit
that referenced
this pull request
Jul 30, 2026
The first version drew a share bar under every holding. An organization's own issued tokens have no price feed, so their bars were empty full-width tracks that read as dividers — and ranking 132.5 nwSOL against $149.11 on one scale compared quantities that share no unit. Priced holdings now compose a single segmented allocation bar whose shares sum to 100, with a legend carrying the percentage and the value. Unpriced holdings are listed below a No price feed rule with their amount and no bar, because there is no share to show. Holdings past the fourth fold into one Other segment so the bar stays readable. Segment fills step down the neutral emphasis ramp. The design system ships no categorical chart palette, and an allocation bar encodes magnitude rather than identity, so a single ramp is the right encoding — and it re-steps itself per theme instead of needing a hand-picked dark variant.
Four equal tiles gave the balance, the day's volume, a wallet count and a token count the same visual weight, so the page answered no question first — the reader had to pick one. Total balance is what someone opening a custody dashboard came for, so it now leads at roughly twice the type size, with the other three as context beneath it and the primary actions in the same block rather than floating above the page. The token allocation folds into the same card, so the whole money picture is one object instead of three. An organization with no wallets no longer gets four zeroes each with its own apologetic hint, which reads as a broken dashboard rather than a new one. It gets one instruction and the button beside it.
Extracting the hero took the workspace under the cognitive-complexity threshold, so its biome-ignore no longer suppresses anything, and the tile grid took the day's volume hint with it.
Three changes to the same card. Token marks replace the colour swatches. The repo already ships brand SVGs under public/token-logos and a TokenMark component that falls back to a tinted monogram, so an organization's own issued tokens get a mark too rather than a bare square. The secondary figures were 15px against a 46px balance, which read as fine print rather than as the three numbers someone actually scans. They are now 22px. The bar and the list are one object: hovering either a segment or its row lifts that holding and drops the others to 35 percent. Segments are buttons so the same highlight follows keyboard focus, and each carries its share in an accessible label.
Mouse handlers on a plain element are a keyboard trap and biome flags them. The segment button already owns the interaction and drives the dim-others linkage; the row now mirrors it with a CSS hover instead of its own handlers.
Three follow-ups on the balance card. The unpriced list was uncapped. An organization issuing a dozen of its own tokens turned the card into a ledger, so it now lists the largest few and counts the rest, the same way the priced side already folded into Other. Home no longer paints a 36px page title. The sidebar marks Home active and the page opens on a balance, so the heading said nothing the reader could not see; it is now rendered sr-only, which keeps it for assistive tech. Only the home route changed — a wallet detail or a new API key still needs its title for orientation. The route skeleton still drew the retired four-tile grid, so the layout jumped on load. It now mirrors the hero: balance, three context figures, the allocation bar and its rows.
The activity table squeezed Token and Amount into fixed 8rem and 10rem columns while Address took every remaining pixel, so both truncated with space to spare. Amount also repeated the token beside a column that already named it, which is how a row read "132.5 Ackroo…tPc9" twice over. Amount is now numeric, right aligned and tabular, Token carries its mark, and the freed width goes to Address. The mobile card keeps the symbol on the amount, because it has no separate token column to lean on. Page titles are hidden on the top-level list routes. The sidebar already names the active section, so a 36px heading repeating it spent vertical space saying nothing. Detail and action routes keep theirs — the centred title beside a back action is the only orientation those have. Hiding is now visual only: the top bar renders an sr-only h1 in place of the visible one, so every page still has exactly one heading for assistive tech and for the tests that look one up.
GuiBibeau
self-requested a review
August 3, 2026 05:35
GuiBibeau
approved these changes
Aug 4, 2026
This was referenced Aug 4, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The home page showed two currency tiles and one table, leaving most of the viewport empty and answering no question first.
It now leads with total balance at full weight, with the day's volume, wallet count and tokens held as context beneath it and the primary actions in the same block. Token allocation folds into the same card, so the money picture is one object rather than three.
Details worth a look:
TokenMark, so bundled logos render and everything else gets a monogram. Hovering a segment or a row lifts that holding and drops the others; segments are buttons, so keyboard focus does the same./dashboardstops painting a 36px "Home" title, which said nothing the sidebar and the page did not already say. The heading is nowsr-only; other routes are unchanged.Rendered and checked in dark and light. Allocation logic is a pure module with unit tests.
Screenshots